package com.zz.datareport.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.util.List;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

public class GenerateZipUtil {
	
	/**
	 * 检查zip文件路径是否存在，不存在则创建
	 */
	private static void createZipFiles() {
		File zipFile;
		try {
			zipFile = new File(GeneralUtil.readConfigurationByProperties("zip_path"));
			if (!zipFile.exists()) {
				zipFile.mkdirs();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 打包成zip包
	 */
	public static void generateZip(OutputStream os, List<File> files) throws Exception { 
		ZipOutputStream out = null;
		try {
			byte[] buffer = new byte[1024];
			//生成的ZIP文件名为Demo.zip
			out = new ZipOutputStream(os);
			//需要同时下载的两个文件result.txt ，source.txt
			for (File file : files) {
				FileInputStream fis = new FileInputStream(file);
				out.putNextEntry(new ZipEntry(file.getName()));
				int len;
				//读入需要下载的文件的内容，打包到zip文件
				while ((len = fis.read(buffer)) != -1) {
					out.write(buffer, 0, len);
				}
				out.setEncoding(Constants.CODE_GBK);  
				out.flush();
				out.closeEntry();
				fis.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				out.close();
			}
		}
	}
	
	
	/**
	 * 生成文件
	 * @throws IOException 
	 */
	public static void outPutFile(String xmlStr,File file) throws IOException{
		createZipFiles();
		// 1：利用File类找到要操作的对象
        if(!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
        //2：准备输出流
        Writer out = new FileWriter(file);
        out.write(xmlStr);
        out.close();
		
	}
	
	/**
	 * 生成文件集合
	 * @throws IOException 
	 */
	public static void outPutFileList(String xmlStr,List<File> fileList) throws IOException{
		createZipFiles();
		for (File file : fileList) {
			// 1：利用File类找到要操作的对象
	        if(!file.getParentFile().exists()){
	            file.getParentFile().mkdirs();
	        }
	        
	        //2：准备输出流
	        Writer out = new FileWriter(file);
	        out.write(xmlStr);
	        out.close();
		}
	}
}
